package com.hub.netty.base.handler;

import com.alibaba.fastjson2.JSONObject;
import com.hub.netty.base.domain.Message;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.util.CharsetUtil;

import java.util.List;

/**
 * 消息解码器
 */
public class MessageDecodeHandler extends ByteToMessageDecoder {

    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf in, List<Object> list) throws Exception {
        ByteBuf frame = in.retainedDuplicate();
        final String content = frame.toString(CharsetUtil.UTF_8);
        Message message = JSONObject.parseObject(content, Message.class);
        list.add(message);
        in.skipBytes(in.readableBytes());
        // 使用完，释放ByteBuf。Netty中ByteBuf作为入参，Netty会释放，无需处理
        frame.release();
    }
}
